<?php
/**
 * Classe de controle de usuários. Cadastro, login, etc...
 *
 * @author Marlon Pacheco
 */

class Usuario extends Conexao {
    
    //Define as colunas utilizadas pela tabela de usuários;
    var $colUsuarios = array(
        'ds_nome_completo' => 'ds_nome_completo',
        'ds_email' => 'ds_email',
        'ds_usuario' => 'ds_usuario',
        'ds_senha'  => 'ds_senha'
    );

    //Define o tipo de encriptação da senha. md5, sha1 ou nada;
    var $encryptType = 'nada';
    
    //Ativa a exibição de erros;
    var $displayErrors = false;
    
    var $string;
    
    //Função que verifica se o usuário informado no login existe no cadastro;
    function verificaUsuario($dados){
        $verifica = $this->Executar("SELECT * FROM {$this->tbUsuarios} WHERE ds_usuario = '$dados'" );
        return mysql_num_rows($verifica);
    }

    //Função que faz a inserção do usuário no cadastro;
    function novoUsuario($dados){
        if (!is_array($dados)) $this->error('Não é um array', __LINE__);
        $senha = $this->encriptaSenha($dados[$this->colUsuarios['ds_senha']]);
        foreach ($dados as $k => $v ) $dados[$k] = "'".$this->escape($v)."'";
        $dados[$this->colUsuarios['ds_senha']] = $senha;
        $this->Executar("INSERT INTO {$this->tbUsuarios} (".implode(',', array_keys($dados)).") VALUES (".implode(", ", $dados).")");
    }
    
      
    //Função que faz o login do usuário no sistema;
    function validaLogin($login, $senha, $lembra) {
        $senha = $this->encriptaSenha($senha);
        $this->Executar("SELECT id_usuario, ds_nome_completo, ds_usuario, ds_email FROM {$this->tbUsuarios} WHERE ds_usuario = '$login' and ds_senha = $senha");
        $teste = "SELECT id_usuario, ds_nome_completo, ds_usuario, ds_email FROM {$this->tbUsuarios} WHERE ds_usuario = '$login' and ds_senha = $senha";
        if($this->ContarLinhas() > 0) {
            while($rs = $this->MostrarResultados()){
                $acesso = $rs[0] . "," . $rs[1] . "," . $rs[2] . "," . $rs[3];
            }
            if($lembra) {
                setcookie("acesso", $acesso, time()+60*60*24*100);
                //echo "<script>localStorage.setItem('acesso','". $acesso."');</script>";                
                return true;
            } else {     
                setcookie("acesso", $acesso);
                //echo "<script>sessionStorage.setItem('acesso','". $acesso."');</script>";                                                
                return true;
            }
        } else {
            return false;
        }
    }
    
    //Função para criação da listagem de usuários na barra lateral;
    function listaUsuarios($id, $tipo) {
        if($tipo == 'S') {
            $sql = "select * from {$this->tbUsuarios} where id_usuario in (select id_usuario2 from {$this->tbVinculos} where id_usuario1 = $id)";
        } else {
            $sql = "select * from {$this->tbUsuarios} where id_usuario not in (select id_usuario from usuarios where id_usuario in (select id_usuario2 from {$this->tbVinculos} where id_usuario1 = $id) or id_usuario = $id)";            
        }
        $this->Executar($sql);
        if($this->ContarLinhas() > 0) {
            return $this;
        } else {
            return false;
        }        
    }
    
    //Função que faz logout do sistema;
    function logout($redirectTo = '') {
        setcookie('acesso', '', time()-3600);
        session_start();
        session_destroy();
        if ($redirectTo != '' && !headers_sent()){
            header('Location: '.$redirectTo );
            exit;//To ensure security
        }
    }    
 
    //Função que faz a encriptação da senha;
    function encriptaSenha($senha) {
        switch(strtolower($this->encryptType)){
          case 'sha1':
                $senha = "'".sha1($senha)."'"; break;
          case 'md5' :
                $senha = "'".md5($senha)."'";break;
          case 'nada':
                $senha = "'".$senha."'";
        }
        return $senha;
    }
    
    //Função que faz a exibição os erros;
    function error($error, $line = '', $die = false) {
        if ( $this->displayErrors )
            return '<b>Erro: </b>'.$error.'<br /><b>Linha: </b>'.($line==''?'Desconhecido':$line).'<br />';
        if ($die) exit;
            return false;
    }
}
?>